package com.sgc.view.util;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

import com.sgv.model.entities.ProdutoModel;

@FacesConverter("ProdutoConverter")
public class ProdutoConverter implements Converter {

	public Object getAsObject(FacesContext fc, UIComponent uic, String value) {

		if (value != null && value.trim().length() > 0) {

			if (!value.contains("#ID")) {
				ProdutoModel lProduto = new ProdutoModel();
				lProduto.setCodigo(0L);
				return lProduto;
			}

			try {

				String lNomeString = value.substring(value.lastIndexOf("#DS") + 3);

				if (lNomeString.isEmpty()) {
					return new ProdutoModel();
				}

				String lCodigoString = value.substring(3, value.lastIndexOf("#VL"));
				String lValorVendaString = value.substring(value.lastIndexOf("#VL") + 3, value.lastIndexOf("#DS")).replaceAll("/.", "")
						.replaceAll(",", "/.");

				lValorVendaString = lValorVendaString.equals("null") ? null : lValorVendaString;

				ProdutoModel lProduto = new ProdutoModel();
				lProduto.setCodigo(Long.valueOf(lCodigoString));
				lProduto.setValorVenda(lValorVendaString != null && !lValorVendaString.isEmpty() ? Double.valueOf(lValorVendaString) : null);
				lProduto.setNome(lNomeString);

				if (lProduto.getValorVenda() == null) {
					lProduto.setPossuiNovoValor(true);
				}

				return lProduto;
			}
			catch (Exception e) {
				throw new ConverterException(e);
			}
		}

		else {
			return new ProdutoModel();
		}
	}

	public String getAsString(FacesContext fc, UIComponent uic, Object object) {

		if (object != null && ((ProdutoModel) object).getCodigo() != null) {
			ProdutoModel lProdutoModel = (ProdutoModel) object;

			StringBuilder lSb = new StringBuilder();
			lSb.append("#ID");
			lSb.append(lProdutoModel.getCodigo() != null ? lProdutoModel.getCodigo() : "");
			lSb.append("#VL");
			lSb.append(lProdutoModel.getValorVenda() != null ? lProdutoModel.getValorVenda() : "");
			lSb.append("#DS");
			lSb.append(lProdutoModel.getNome() != null ? lProdutoModel.getNome() : "");

			return lSb.toString();
		}

		else {
			return null;
		}
	}
}